//
// Created by Toosan on 2022/5/3.
//

#include <zconf.h>
#include "iostream"
#include "pthread.h"

using namespace std;

/**
 * 相当于java中的run函数
 * @param number
 * @return
 */
void *pthreadTask(void *number) {
    int num = *static_cast<int *>(number);
    for (int i = 0; i < num; ++i) {
        cout << "pthreadTask i = " << i+1 << endl;
        sleep(1);
    }
    *static_cast<int *>(number) = num + 1;
    return 0;
}

/**
 * pthread 学习的重点
 * @return
 */
int main() {
    // 每个线程都需要的线程id  可以不初始化，允许存在野指针。。。 不允许野指针的话，一定要进行初始化
    pthread_t pthreadId;
    /**
     * 四个参数
     * 1.线程id
     * 2.线程属性
     * 3.函数指针 （回调函数）
     * 4.回调函数的入参 （void * 代表可以传任意类型）
     */
    int number = 5;
    // 在子线程中执行pthreadTask函数
    pthread_create(&pthreadId,  0, pthreadTask, &number);
//    sleep(6);
    /**
     * pthreadId等这个线程执行完才会执行该代码后面的代码逻辑
     * main()函数也会等待 --> 非分离线程  main()结束，全部结束 --> 分离线程
     * 顺序执行  --> 使用非分离线程
     *  多线程一起执行  --> 使用分离线程  不需要谁去等待谁，各玩各的，main结束全完蛋。
     */
    pthread_join(pthreadId,0);
    cout << "main number = " << number << endl;

    return 0;
}